﻿#ifndef ATTRIBUTEPANELADAPTER_H
#define ATTRIBUTEPANELADAPTER_H

#include <QObject>
#include <QComboBox>
#include <QLineEdit>
#include <QSignalBlocker>

/**
 * @brief AttributePanelAdapter
 * @details 封装属性面板控件，负责在 Presenter 与界面之间同步数据。
 */
class AttributePanelAdapter : public QObject
{
    Q_OBJECT
public:
    /**
     * @brief AttributePanelAdapter::AttributePanelAdapter
     * @details 构造适配器并注入相关控件。
     * @param cmbModel 型号下拉框。
     * @param cmbIfType 接口类型下拉框。
     * @param edtAddr 地址输入框。
     * @param parent Qt 父对象。
     */
    explicit AttributePanelAdapter(QComboBox *cmbModel,
                                   QComboBox *cmbIfType,
                                   QLineEdit *edtAddr,
                                   QObject *parent = nullptr);

    // Presenter -> 面板（阻断信号避免回环）
    /**
     * @brief AttributePanelAdapter::setAvailableModels
     * @details 设置可选型号列表。
     * @param models 型号集合。
     */
    void setAvailableModels(const QStringList &models);
    /**
     * @brief AttributePanelAdapter::setInterfaceTypeNames
     * @details 设置接口类型名称列表。
     * @param names 名称集合。
     */
    void setInterfaceTypeNames(const QStringList &names);
    /**
     * @brief AttributePanelAdapter::setData
     * @details 同步型号、接口和地址数据。
     * @param model 当前型号。
     * @param ifIndex 接口索引。
     * @param addr 接口地址。
     */
    void setData(const QString &model, int ifIndex, const QString &addr);
    /**
     * @brief AttributePanelAdapter::setEnabled
     * @details 控制属性面板启用状态。
     * @param en 是否启用。
     */
    void setEnabled(bool en);

signals:
    /**
     * @brief AttributePanelAdapter::modelEdited
     * @details 型号被编辑时发射。
     * @param model 新型号。
     */
    void modelEdited(const QString &model);
    /**
     * @brief AttributePanelAdapter::interfaceEdited
     * @details 接口类型切换时发射。
     * @param ifIndex 接口索引。
     */
    void interfaceEdited(int ifIndex);
    /**
     * @brief AttributePanelAdapter::addressEdited
     * @details 地址输入修改时发射。
     * @param addr 新地址。
     */
    void addressEdited(const QString &addr);

private:
    QComboBox *cmbModel_ {nullptr};
    QComboBox *cmbIfType_ {nullptr};
    QLineEdit *edtAddr_ {nullptr};
};

#endif // ATTRIBUTEPANELADAPTER_H
